# 定义路由
import openai
from flask import Flask, redirect, render_template, request, url_for
import os
from pathlib import Path
import openai
import yaml

app = Flask(__name__)


# 获取 openai 配置
conf_path = Path(__file__).parent.joinpath('conf/dev.yaml')
with open(conf_path) as f:
    conf: dict = yaml.safe_load(f)
os.environ["OPENAI_API_KEY"] = "cc84cb87efef3e9903e8a30abf316b62"  # 将个人token替换到这个位置
os.environ["OPENAI_BASE_URL"] = "https://apitoken.ceba.ceshiren.com/openai/v1/"
os.environ["OPENAI_API_BASE"] = "https://apitoken.ceba.ceshiren.com/openai/v1/"


messages = []


@app.route("/", methods=("GET", "POST"))
def index():
    global messages
    if request.method == "POST":
        # 获取前端的输入信息
        animal = request.form.get("animal")
        if messages:
            # 有上下文历史
            messages.append({
                'role': 'user',
                'content': animal
            })
        else:
            # 第一次初始化
            messages.append({
                'role': 'user',
                'content': generate_prompt(animal)
            })
        print(f"messages: {messages}")
        response = openai.chat.completions.create(
            model='gpt-3.5-turbo',
            messages=messages,
            temperature=0
        )
        # 打印大模型的返回值
        answer = response.choices[0].message.content
        # 刷新首页，返回答案信息
        return redirect(url_for("index", result=answer))
    result = request.args.get("result")
    return render_template("index.html", result=result)


def generate_prompt(animal):
    return """你是一名软件测试工程师，你了解软件测试的技术与经验，你需要面试应聘者.
    我是应聘者，你会问我这个职位的面试问题。
    我希望你只以面试官的身份回答，一次只问一个问题，问我问题并等待我的回答。
    当我说结束面试的时候给出我的面试表现的评价
    我的输入是 {}
""".format(
        animal.capitalize()
    )


if __name__ == '__main__':
    app.run(debug=True)
